package com.hello.system.domain;

import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.hello.common.core.annotation.Excel;
import com.hello.common.core.web.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;

/**
 * 用户评论/动态对象 comments
 * 
 * @author hello
 * @date 2025-10-29
 */
@Data
@EqualsAndHashCode(callSuper = true)
public class Comments extends BaseEntity
{
    private static final long serialVersionUID = 1L;

    /** 评论ID（主键） */
    private Long commentId;

    /** 评论标题 */
    @Excel(name = "评论标题")
    private String commentTitle;

    /** 评论内容 */
    @Excel(name = "评论内容")
    private String commentContent;

    /** 评论图片URL列表（JSON数组） */
    @Excel(name = "评论图片URL列表", readConverterExp = "J=SON数组")
    private String commentImages;

    /** 评论分类（JSON） */
    @Excel(name = "评论分类", readConverterExp = "J=SON")
    private String commentCategory;

    /** 评论标签（JSON数组） */
    @Excel(name = "评论标签", readConverterExp = "J=SON数组")
    private String commentTags;

    /** 评论地点（文本描述） */
    @Excel(name = "评论地点", readConverterExp = "文=本描述")
    private String commentLocation;

    /** 评论坐标（经纬度地理位置） */
    @Excel(name = "评论坐标", readConverterExp = "经=纬度地理位置")
    private String commentCoordinates;

    /** 发布时间 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "发布时间", width = 30, dateFormat = "yyyy-MM-dd")
    private Date commentPublishTime;

    /** 购物晒单图片URL列表（JSON数组） */
    @Excel(name = "购物晒单图片URL列表", readConverterExp = "J=SON数组")
    private String shoppingImages;

    /** 发布者用户ID */
    @Excel(name = "发布者用户ID")
    private Long publisherId;

    /** 发布者头像URL */
    @Excel(name = "发布者头像URL")
    private String publisherAvatar;

    /** 发布者昵称 */
    @Excel(name = "发布者昵称")
    private String publisherNickname;

    /** 发布者个性签名 */
    @Excel(name = "发布者个性签名")
    private String publisherSignature;

    /** 发布者标签（JSON数组） */
    @Excel(name = "发布者标签", readConverterExp = "J=SON数组")
    private String publisherTags;

    /** 发布者积分 */
    @Excel(name = "发布者积分")
    private Long publisherPoints;

    /** 点赞数量 */
    @Excel(name = "点赞数量")
    private Long likeCount;

    /** 评论数量 */
    @Excel(name = "评论数量")
    private Long commentCount;

    /** 分享数量 */
    @Excel(name = "分享数量")
    private Long shareCount;

    /** 评论状态（JSON，如是否显示、是否精选、审核状态等） */
    @Excel(name = "评论状态", readConverterExp = "J=SON，如是否显示、是否精选、审核状态等")
    private String status;

    /** 额外扩展数据（JSON格式） */
    @Excel(name = "额外扩展数据", readConverterExp = "J=SON格式")
    private String extraData;

    /** 创建时间 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "创建时间", width = 30, dateFormat = "yyyy-MM-dd")
    private Date createdAt;

    /** 更新时间 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "更新时间", width = 30, dateFormat = "yyyy-MM-dd")
    private Date updatedAt;

    public void setCommentId(Long commentId) 
    {
        this.commentId = commentId;
    }

    public Long getCommentId() 
    {
        return commentId;
    }
    public void setCommentTitle(String commentTitle) 
    {
        this.commentTitle = commentTitle;
    }

    public String getCommentTitle() 
    {
        return commentTitle;
    }
    public void setCommentContent(String commentContent) 
    {
        this.commentContent = commentContent;
    }

    public String getCommentContent() 
    {
        return commentContent;
    }
    public void setCommentImages(String commentImages) 
    {
        this.commentImages = commentImages;
    }

    public String getCommentImages() 
    {
        return commentImages;
    }
    public void setCommentCategory(String commentCategory) 
    {
        this.commentCategory = commentCategory;
    }

    public String getCommentCategory() 
    {
        return commentCategory;
    }
    public void setCommentTags(String commentTags) 
    {
        this.commentTags = commentTags;
    }

    public String getCommentTags() 
    {
        return commentTags;
    }
    public void setCommentLocation(String commentLocation) 
    {
        this.commentLocation = commentLocation;
    }

    public String getCommentLocation() 
    {
        return commentLocation;
    }
    public void setCommentCoordinates(String commentCoordinates) 
    {
        this.commentCoordinates = commentCoordinates;
    }

    public String getCommentCoordinates() 
    {
        return commentCoordinates;
    }
    public void setCommentPublishTime(Date commentPublishTime) 
    {
        this.commentPublishTime = commentPublishTime;
    }

    public Date getCommentPublishTime() 
    {
        return commentPublishTime;
    }
    public void setShoppingImages(String shoppingImages) 
    {
        this.shoppingImages = shoppingImages;
    }

    public String getShoppingImages() 
    {
        return shoppingImages;
    }
    public void setPublisherId(Long publisherId) 
    {
        this.publisherId = publisherId;
    }

    public Long getPublisherId() 
    {
        return publisherId;
    }
    public void setPublisherAvatar(String publisherAvatar) 
    {
        this.publisherAvatar = publisherAvatar;
    }

    public String getPublisherAvatar() 
    {
        return publisherAvatar;
    }
    public void setPublisherNickname(String publisherNickname) 
    {
        this.publisherNickname = publisherNickname;
    }

    public String getPublisherNickname() 
    {
        return publisherNickname;
    }
    public void setPublisherSignature(String publisherSignature) 
    {
        this.publisherSignature = publisherSignature;
    }

    public String getPublisherSignature() 
    {
        return publisherSignature;
    }
    public void setPublisherTags(String publisherTags) 
    {
        this.publisherTags = publisherTags;
    }

    public String getPublisherTags() 
    {
        return publisherTags;
    }
    public void setPublisherPoints(Long publisherPoints) 
    {
        this.publisherPoints = publisherPoints;
    }

    public Long getPublisherPoints() 
    {
        return publisherPoints;
    }
    public void setLikeCount(Long likeCount) 
    {
        this.likeCount = likeCount;
    }

    public Long getLikeCount() 
    {
        return likeCount;
    }
    public void setCommentCount(Long commentCount) 
    {
        this.commentCount = commentCount;
    }

    public Long getCommentCount() 
    {
        return commentCount;
    }
    public void setShareCount(Long shareCount) 
    {
        this.shareCount = shareCount;
    }

    public Long getShareCount() 
    {
        return shareCount;
    }
    public void setStatus(String status) 
    {
        this.status = status;
    }

    public String getStatus() 
    {
        return status;
    }
    public void setExtraData(String extraData) 
    {
        this.extraData = extraData;
    }

    public String getExtraData() 
    {
        return extraData;
    }
    public void setCreatedAt(Date createdAt) 
    {
        this.createdAt = createdAt;
    }

    public Date getCreatedAt() 
    {
        return createdAt;
    }
    public void setUpdatedAt(Date updatedAt) 
    {
        this.updatedAt = updatedAt;
    }

    public Date getUpdatedAt() 
    {
        return updatedAt;
    }

    @Override
    public String toString() {
        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
            .append("commentId", getCommentId())
            .append("commentTitle", getCommentTitle())
            .append("commentContent", getCommentContent())
            .append("commentImages", getCommentImages())
            .append("commentCategory", getCommentCategory())
            .append("commentTags", getCommentTags())
            .append("commentLocation", getCommentLocation())
            .append("commentCoordinates", getCommentCoordinates())
            .append("commentPublishTime", getCommentPublishTime())
            .append("shoppingImages", getShoppingImages())
            .append("publisherId", getPublisherId())
            .append("publisherAvatar", getPublisherAvatar())
            .append("publisherNickname", getPublisherNickname())
            .append("publisherSignature", getPublisherSignature())
            .append("publisherTags", getPublisherTags())
            .append("publisherPoints", getPublisherPoints())
            .append("likeCount", getLikeCount())
            .append("commentCount", getCommentCount())
            .append("shareCount", getShareCount())
            .append("status", getStatus())
            .append("extraData", getExtraData())
            .append("createdAt", getCreatedAt())
            .append("updatedAt", getUpdatedAt())
            .toString();
    }
}
